#pragma once

#include <list>

namespace ann
{
	class Tube;

	class ANN_Node
	{
	public:
	
		ANN_Node(void): m_value(0.0)
		{
		}
	
		virtual ~ANN_Node(void)
		{
		}
	
		virtual void    Update  ( void ) /*= 0;*/ {}

		double	GetValue    ( void )                { return m_value; }
		void	SetValue    ( const double pValue ) { m_value = pValue; }
		void	AddInTube   ( Tube* pTube )         { m_InTube.push_back( pTube ); }
		void	AddOutTube  ( Tube* pTube )         { m_OutTube.push_back( pTube ); }

		std::list<Tube*>::iterator GetInTubeBeginItr    (void) { return m_InTube.begin(); }
		std::list<Tube*>::iterator GetOutTubeBeginItr   (void) { return m_OutTube.begin(); }
		std::list<Tube*>::iterator GetInTubeEndItr      (void) { return m_InTube.end(); }
		std::list<Tube*>::iterator GetOutTubeEndItr     (void) { return m_OutTube.end(); }
	
	private:
		double	m_value;

		std::list<Tube*> m_InTube;
		std::list<Tube*> m_OutTube;
	};
}

